﻿using System;
using System.Linq;
using SubsidiosBussinessLogic.Models;

namespace SubsidiosBussinessLogic.DataAccess.Interfaces
{
    public interface IBloqueRepository
    {
        /// <summary>
        /// Retorna una coleccion de Bloque
        /// </summary>
        /// <returns></returns>
        IQueryable<Bloque> GetBloques();

        /// <summary>
        /// Crea una nueva instancia de Bloque
        /// </summary>
        /// <returns></returns>
        Bloque CreateBloque();
        
        /// <summary>
        /// Retorna un bloque que machee con la expresion
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        Bloque FindSingle(Func<Bloque, bool> func);

        /// <summary>
        /// Retorna todos los bloques que machean con la expresion
        /// </summary>
        /// <param name="func"></param>
        /// <returns></returns>
        IQueryable<Bloque> FindWithMatch(Func<Bloque, bool> func);

        /// <summary>
        /// Prepara para borrar un Bloque
        /// </summary>
        /// <param name="bloque"></param>
        void DeleteBloque(Bloque bloque);

        /// <summary>
        /// Commitea los cambios en la base
        /// </summary>
        void SaveBloque();
    }
}
